package qualomelhor.gwt.modules.client;

//import twitter4j.Status;
//import twitter4j.Twitter;
//import twitter4j.TwitterException;
//import twitter4j.TwitterFactory;

import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Style.FontWeight;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.event.dom.client.BlurEvent;
import com.google.gwt.event.dom.client.BlurHandler;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.HTMLPanel;
import com.google.gwt.user.client.ui.HasHorizontalAlignment;
import com.google.gwt.user.client.ui.HasVerticalAlignment;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.TextArea;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.VerticalPanel;

public class VotoComparacao implements EntryPoint {
	private RootPanel root;
	private ISessionSuportServiceAsync serviceSupportSvc = GWT.create(ISessionSuportService.class);
	private LanguageConstants constants = GWT.create(LanguageConstants.class);
	private LanguageMessages messages = GWT.create(LanguageMessages.class);
	private String locale;

	int currentRow;
	FlexTable resultsTable;

	public static native void showDivBloqueio()  /*-{
		$doc.getElementById("divBloqueio").style.display="block";
		$doc.getElementById("divBloqueioSolido").style.display="block";
	}-*/;

	public static native void addVoto(Long idComparacao, int idVoto, Long prodNum, Long idUsuario, String nomeUsuario, String strIconeUsuario, String coment)  /*-{
		//$wnd.alert("vai enviar addVoto_js..");
		$wnd.addVoto_js(idComparacao, idVoto, prodNum, idUsuario, nomeUsuario, strIconeUsuario, coment);
	}-*/;

	public static native void alteraVoto(Long idComparacao, int idVoto, Long prodNum, Long idUsuario, String nomeUsuario, String strIconeUsuario, String coment)  /*-{
		//$wnd.alert("vai enviar addVoto_js..");
		$wnd.alteraVoto_js(idComparacao, idVoto, prodNum, idUsuario, nomeUsuario, strIconeUsuario, coment);
	}-*/;

	public static native void deletaVoto(int idVoto, Long prodNum)  /*-{
		$wnd.deletaVoto_js(idVoto, prodNum);
	}-*/;

	public static native void postarFB(String coment)  /*-{
		//$wnd.alert("postando...$wnd.postarFB_js = " + $wnd.postarFB_js);
		$wnd.postarFB_js(coment);
	}-*/;

	public static native void postarTweet(String coment)  /*-{
		$wnd.alert("coment = " + coment);
		$wnd.alert("postando tweet...postTweet_js = " + $wnd.postTweet_js);
		//esta rotina esta em votoComparacao.js na pasta public
		$wnd.postTweet_js(coment);
	}-*/;

	public static native void startCopyEvent(String text)  /*-{
		$wnd.copyToClipBoardEvent(text);
		//$wnd.alert("startCopyEvent ok");
	}-*/;

	public static native void 	alteraLinkBlog(String nomeBlog, String link) /*-{
		$wnd.alteraLinkBlog_js(nomeBlog, link);
	}-*/;

	public static native void addResposta(Long idComparacao, int idVoto, String pathId, Long idProd, Long idUsuario, String nomeUsuario, String strIconeUsuario, String coment, int margin, String divIdDest, int idResposta)  /*-{
		//$wnd.alert("addResposta chamado! idComparacao = " + idComparacao + ", idVoto: " + idVoto + ", prodNum = " + prodNum + ", nomeUsuario = " + nomeUsuario + ", coment = " + coment + ", margin = " + margin + ", divIdDest = " + divIdDest + ", idResposta = " + idResposta + ", pathId = " + pathId);
		//$wnd.alert($wnd.addResposta_js);
		//$wnd.alert("parseInt(new String(idComparacao)) = " + parseInt(new String(idComparacao)));
		//$wnd.addResposta(parseInt(new String(idComparacao)), parseInt(new String(idVoto)), parseInt(new String(idProd)), new String(nomeUsuario), new String(coment), parseInt(new String(margin)), new String(divIdDest), parseInt(new String(idResposta)));
		$wnd.addResposta_js(idComparacao, idVoto, pathId, idProd, idUsuario, nomeUsuario, strIconeUsuario, coment, margin, divIdDest, idResposta);
	}-*/;

	public static native void hideDivBloqueio()  /*-{
		//$wnd.alert("teste = " + $doc.getElementById("divBloqueio").style.display);
		$doc.getElementById("divBloqueio").style.display="none";
		$doc.getElementById("divBloqueioSolido").style.display="none";
	}-*/;

	public static native void exportaCarregaFormVoto(VotoComparacao votoInstance) /*-{
		$wnd.carregaFormVoto_j = function (idUsuario, nomeUsuario, strIconeUsuario, idComparacao, idProduto, imgPath, nomeProduto, perguntaBase) {
			votoInstance.@qualomelhor.gwt.modules.client.VotoComparacao::carregaFormVoto(Ljava/lang/Long;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)(idUsuario, nomeUsuario, strIconeUsuario, idComparacao, idProduto, imgPath, nomeProduto, perguntaBase);
		}
	}-*/;

	public static native void exportaSalvaShareFBID(VotoComparacao votoInstance) /*-{
		$wnd.salvaShareFBID_j = function (idComparacao, idShare) {
			//$wnd.alert("tentando salvar o sharefb em votocomparacao");
			votoInstance.@qualomelhor.gwt.modules.client.VotoComparacao::salvaShareFBID(Ljava/lang/Long;Ljava/lang/String;)(idComparacao, idShare);
		}
	}-*/;

	public static native void exportaCarregaFormAlteraVoto(VotoComparacao votoInstance) /*-{
		$wnd.carregaFormAlteraVoto_j = function (idVoto, idUsuario, nomeUsuario, strIconeUsuario, idComparacao, idProduto, imgPath, nomeProduto, perguntaBase, comentBase) {
			votoInstance.@qualomelhor.gwt.modules.client.VotoComparacao::carregaFormAlteraVoto(ILjava/lang/Long;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)(idVoto, idUsuario, nomeUsuario, strIconeUsuario, idComparacao, idProduto, imgPath, nomeProduto, perguntaBase, comentBase);
		}
	}-*/;

	public static native void exportaCarregaFormResposta(VotoComparacao votoInstance) /*-{
		$wnd.carregaFormResposta_j = function (idUsuario, nomeUsuario, strIconeUsuario, idComparacao, idVoto, idProd, pathId, nomeUsuarioBase, comentBase, margin, divIdDest) {
			votoInstance.@qualomelhor.gwt.modules.client.VotoComparacao::carregaFormResposta(Ljava/lang/Long;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;ILjava/lang/Long;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;)(idUsuario, nomeUsuario, strIconeUsuario, idComparacao, idVoto, idProd, pathId, nomeUsuarioBase, comentBase, margin, divIdDest);
		}
	}-*/;

	public static native void exportaCarregaFormShareFB(VotoComparacao votoInstance) /*-{
		$wnd.carregaFormShareFB_j = function (pergunta) {
			votoInstance.@qualomelhor.gwt.modules.client.VotoComparacao::carregaFormShareFB(Ljava/lang/String;)(pergunta);
		}
	}-*/;

	public static native void exportaCarregaFormErroFB(VotoComparacao votoInstance) /*-{
		//$wnd.alert("exportaCarregaFormErroFB");
		$wnd.carregaFormErroFB_j = function (msgErro) {
			votoInstance.@qualomelhor.gwt.modules.client.VotoComparacao::carregaFormErroFB(Ljava/lang/String;)(msgErro);
		}
		//$wnd.alert("exportaCarregaFormErroFB ok..");
	}-*/;

	public static native void exportaCarregaFormShareTwitter(VotoComparacao votoInstance) /*-{
		$wnd.carregaFormShareTwitter_j = function (pergunta) {
			votoInstance.@qualomelhor.gwt.modules.client.VotoComparacao::carregaFormShareTwitter(Ljava/lang/String;)(pergunta);
		}
	}-*/;

	public static native void exportaCarregaFormShareBlog(VotoComparacao votoInstance) /*-{
		//$wnd.alert("carregaFormShareBlog_j ok");
		$wnd.carregaFormShareBlog_j = function (site, link, compNum, pergunta, idComparacao, idUsuario, userAnonimo, permitirLink, nomeBlog, linkBlog) {
			votoInstance.@qualomelhor.gwt.modules.client.VotoComparacao::carregaFormShareBlog(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;Ljava/lang/String;Ljava/lang/Long;Ljava/lang/Long;ZZLjava/lang/String;Ljava/lang/String;)(site, link, compNum, pergunta, idComparacao, idUsuario, userAnonimo, permitirLink, nomeBlog, linkBlog);
		}
	}-*/;

	public static native void setMsgTextGWT(String txt, boolean hideOnTime) /*-{
		//alert($wnd.sendMsgText2_j);
		if ($wnd.sendMsgText2_j) {
			//alert("dentro do if...");
			$wnd.sendMsgText2_j(txt, hideOnTime);
			//alert("executou o sendmsgtext2...");
		} else {
			//$wnd.alert("sendMsgText2_j nao pronto");
		}
	}-*/;

	@Override
	public void onModuleLoad() {
		System.out.println("Iniciando modulo...");
		exportaCarregaFormVoto(this);
		exportaCarregaFormResposta(this);
		exportaCarregaFormShareFB(this);
		exportaCarregaFormShareBlog(this);
		exportaCarregaFormShareTwitter(this);
		exportaCarregaFormErroFB(this);
		exportaCarregaFormAlteraVoto(this);
		exportaSalvaShareFBID(this);
		root = RootPanel.get("divPopupCentro");
	}

	private void carregaFormAlteraVoto(final int idVoto, final Long idUsuario, final String nomeUsuario, final String strIconeUsuario, final Long idComparacao, final Long idProduto, String imgPath, String nomeProduto, String perguntaBase, String comentBase) {
		//Window.alert("carregaFormAlteraVoto em votocomparacao");
		root.clear();

		VerticalPanel vertP = new VerticalPanel();
		root.add(vertP);
		vertP.setStylePrimaryName("divCemPorCento");
		//vertP.setBorderWidth(1);

		Label lbPerguntaBase = new Label ("\"" + perguntaBase + "\"");
		vertP.add(lbPerguntaBase);
		lbPerguntaBase.setStylePrimaryName("fontTexto2");
		lbPerguntaBase.addStyleName("break-word");
		lbPerguntaBase.getElement().getStyle().setFontSize(24, Unit.PX);
		lbPerguntaBase.setWidth("94%");

		HorizontalPanel horP = new HorizontalPanel();
		vertP.add(horP);
		horP.setWidth("100%");

		Label lb = new Label(constants.voce_ja_votou_no_item() + ": " + nomeProduto + "!");
		horP.add(lb);
		lb.setStylePrimaryName("fontTexto1");
		horP.setCellVerticalAlignment(lb, HasVerticalAlignment.ALIGN_MIDDLE);
		horP.setCellHorizontalAlignment(lb, HasHorizontalAlignment.ALIGN_CENTER);

		HTMLPanel htmlP = new HTMLPanel("<img style=\"width:100px; height: 100px;\" src=\"" + imgPath + "\">");
		horP.add(htmlP);
		horP.setCellHorizontalAlignment(htmlP, HasHorizontalAlignment.ALIGN_CENTER);

		//Label lbComent = new Label ("\"" + comentBase + "\"");
		//vertP.add(lbComent);
		//lbComent.setStylePrimaryName("fontTexto3");
		//lbComent.addStyleName("break-word");
		//lbComent.setWidth("94%");

		Label lbDesejaAlterar = new Label(constants.deseja_alterar_o_seu_voto());
		vertP.add(lbDesejaAlterar);

		final TextArea txtComent = new TextArea();
		vertP.add(txtComent);
		txtComent.setText(comentBase);
		txtComent.setStylePrimaryName("boxRounded2");
		txtComent.addStyleName("divCemPorCento");
		txtComent.addStyleName("boxShadow");
		txtComent.addStyleName("textAreaNoResize");
		txtComent.setSize("94%", "100px");

		HorizontalPanel horPBotoesSimNao = new HorizontalPanel();
		vertP.add(horPBotoesSimNao);
		horPBotoesSimNao.setSpacing(20);
		horPBotoesSimNao.setStylePrimaryName("divCenter");
		vertP.setCellHorizontalAlignment(horPBotoesSimNao, HasHorizontalAlignment.ALIGN_CENTER);

		Button btnAlterarVoto = new Button(constants.salvar());
		horPBotoesSimNao.add(btnAlterarVoto);
		btnAlterarVoto.setStylePrimaryName("btnComandoPadrao");
		btnAlterarVoto.setWidth("120px");
		btnAlterarVoto.addClickHandler(new ClickHandler() {
			@Override
			public void onClick(ClickEvent event) {
				alteraVoto(Integer.parseInt(String.valueOf(idVoto)), Long.parseLong(String.valueOf(idComparacao)), Long.parseLong(String.valueOf(idUsuario)), String.valueOf(nomeUsuario), String.valueOf(strIconeUsuario), Long.parseLong(String.valueOf(idProduto)), String.valueOf(txtComent.getText()));
			}
		});

		Button btnDeletaVoto = new Button(constants.deletar());
		horPBotoesSimNao.add(btnDeletaVoto);
		btnDeletaVoto.setStylePrimaryName("btnComandoPadrao2");
		btnDeletaVoto.setWidth("120px");
		btnDeletaVoto.addClickHandler(new ClickHandler() {
			@Override
			public void onClick(ClickEvent event) {
				deletaVoto(Integer.parseInt(String.valueOf(idVoto)), Long.parseLong(String.valueOf(idComparacao)), Long.parseLong(String.valueOf(idUsuario)), Long.parseLong(String.valueOf(idProduto)));
			}
		});

		Button btnCancel = new Button(constants.cancel());
		horPBotoesSimNao.add(btnCancel);
		btnCancel.setStylePrimaryName("btnComandoPadrao");
		btnCancel.setWidth("120px");
		btnCancel.addClickHandler(new ClickHandler() {
			@Override
			public void onClick(ClickEvent event) {
				hideDivBloqueio();
			}
		});
	}

	private void carregaFormVoto(final Long idUsuario, final String nomeUsuario, final String strIconeUsuario, final Long idComparacao, final Long idProduto, String imgPath, String nomeProduto, String perguntaBase) {
		root.clear();

		VerticalPanel vertP = new VerticalPanel();
		root.add(vertP);
		vertP.setStylePrimaryName("divCemPorCento");
		//vertP.setBorderWidth(1);

		Label lbPerguntaBase = new Label ("\"" + perguntaBase + "\"");
		vertP.add(lbPerguntaBase);
		lbPerguntaBase.setStylePrimaryName("fontTexto2");
		lbPerguntaBase.addStyleName("break-word");
		lbPerguntaBase.getElement().getStyle().setFontSize(24, Unit.PX);
		lbPerguntaBase.setWidth("94%");

		HorizontalPanel horP = new HorizontalPanel();
		vertP.add(horP);
		horP.setWidth("100%");

		Label lb = new Label(constants.confirma_o_voto_para() + " " + nomeProduto + "?");
		horP.add(lb);
		lb.setStylePrimaryName("fontTexto1");
		horP.setCellVerticalAlignment(lb, HasVerticalAlignment.ALIGN_MIDDLE);
		horP.setCellHorizontalAlignment(lb, HasHorizontalAlignment.ALIGN_CENTER);

		HTMLPanel htmlP = new HTMLPanel("<img style=\"width:100px; height: 100px;\" src=\"" + imgPath + "\">");
		horP.add(htmlP);
		horP.setCellHorizontalAlignment(htmlP, HasHorizontalAlignment.ALIGN_CENTER);

		Label lb2 = new Label(constants.seu_comentario());
		vertP.add(lb2);
		lb2.setStylePrimaryName("fontPadrao");

		final TextArea txtComent = new TextArea();
		vertP.add(txtComent);
		txtComent.setStylePrimaryName("boxRounded2");
		txtComent.addStyleName("divCemPorCento");
		txtComent.addStyleName("boxShadow");
		txtComent.addStyleName("textAreaNoResize");
		txtComent.setSize("94%", "100px");

		HorizontalPanel horP3 = new HorizontalPanel();
		vertP.add(horP3);
		horP3.setStylePrimaryName("divCenter");
		vertP.setCellHorizontalAlignment(horP3, HasHorizontalAlignment.ALIGN_CENTER);

		Button btnGravaVoto = new Button("OK");
		horP3.add(btnGravaVoto);
		btnGravaVoto.setStylePrimaryName("btnComandoPadrao");
		btnGravaVoto.addClickHandler(new ClickHandler() {
			@Override
			public void onClick(ClickEvent event) {
				//Window.alert("vai gravar o voto");
				//Window.alert("idUsuario = " + idUsuario);
				//Window.alert("idProduto = " + idProduto);
				//Window.alert("idComparacao = " + idComparacao);
				//VotoComparacaoProduto voto = new VotoComparacaoProduto(idUsuario, idProduto, txtComent.getText());
				//Window.alert("vai gravar o voto");
				carregaFormAguarde(constants.postando_voto());
				gravaVoto(Long.parseLong(String.valueOf(idComparacao)), Long.parseLong(String.valueOf(idUsuario)), String.valueOf(nomeUsuario), String.valueOf(strIconeUsuario), Long.parseLong(String.valueOf(idProduto)), String.valueOf(txtComent.getText()));
			}
		});

		Button btnCancel = new Button(constants.cancel());
		horP3.add(btnCancel);
		btnCancel.setStylePrimaryName("btnComandoPadrao");
		btnCancel.addClickHandler(new ClickHandler() {
			@Override
			public void onClick(ClickEvent event) {
				hideDivBloqueio();
			}
		});
	}

	private void carregaFormResposta(final Long idUsuario, final String nomeUsuario, final String strIconeUsuario, final Long idComparacao, final int idVoto, final Long idProd, final String pathId, String nomeUsuarioBase, String comentBase, final int margin, final String divIdDest) {
		root.clear();

		VerticalPanel vertP = new VerticalPanel();
		root.add(vertP);
		vertP.setStylePrimaryName("divCemPorCento");
		//vertP.setBorderWidth(1);		

		Label lb = new Label(constants.resposta_para() + ": " + nomeUsuarioBase);
		vertP.add(lb);
		lb.setStylePrimaryName("fontTexto1");
		lb.addStyleName("break-word");
		lb.setWidth("94%");

		Label lbComent = new Label ("\"" + comentBase + "\"");
		vertP.add(lbComent);
		lbComent.setStylePrimaryName("fontTexto3");
		lbComent.addStyleName("break-word");
		lbComent.setWidth("94%");

		//lb.getElement().getStyle().setBorderStyle(BorderStyle.SOLID);
		//lb.getElement().getStyle().setBorderWidth(1, Unit.PX);
		vertP.setCellVerticalAlignment(lb, HasVerticalAlignment.ALIGN_MIDDLE);
		vertP.setCellHorizontalAlignment(lb, HasHorizontalAlignment.ALIGN_CENTER);

		Label lb2 = new Label(constants.seu_comentario());
		vertP.add(lb2);
		lb2.setStylePrimaryName("fontPadrao");

		final TextArea txtComent = new TextArea();
		vertP.add(txtComent);
		txtComent.setStylePrimaryName("boxRounded2");
		txtComent.addStyleName("divCemPorCento");
		txtComent.addStyleName("boxShadow");
		txtComent.addStyleName("textAreaNoResize");
		txtComent.setSize("94%", "100px");

		HorizontalPanel horP3 = new HorizontalPanel();
		vertP.add(horP3);
		horP3.setStylePrimaryName("divCenter");
		vertP.setCellHorizontalAlignment(horP3, HasHorizontalAlignment.ALIGN_CENTER);

		Button btnGravaResposta = new Button("OK");
		horP3.add(btnGravaResposta);
		btnGravaResposta.setStylePrimaryName("btnComandoPadrao");
		btnGravaResposta.addClickHandler(new ClickHandler() {
			@Override
			public void onClick(ClickEvent event) {
				//Window.alert("vai gravar a resposta");
				//Window.alert("idUsuario = " + idUsuario);
				//Window.alert("idComparacao = " + idComparacao);
				//VotoComparacaoProduto voto = new VotoComparacaoProduto(idUsuario, idProduto, txtComent.getText());
				//Window.alert("vai gravar a resposta");
				//Window.alert("pathId = " + pathId);
				//Window.alert("idVoto = " + idVoto);
				//Window.alert("divIdDest = " + divIdDest);
				//Window.alert("margin = " + margin);
				gravaRespostaComentario(Long.parseLong(String.valueOf(idComparacao)), Long.parseLong(String.valueOf(idUsuario)), String.valueOf(nomeUsuario), String.valueOf(strIconeUsuario), String.valueOf(pathId), Integer.parseInt(String.valueOf(idVoto)), Long.parseLong(String.valueOf(idProd)), String.valueOf(txtComent.getText()), Integer.parseInt(String.valueOf(margin)), String.valueOf(divIdDest));
			}
		});

		Button btnCancel = new Button(constants.cancel());
		horP3.add(btnCancel);
		btnCancel.setStylePrimaryName("btnComandoPadrao");
		btnCancel.addClickHandler(new ClickHandler() {
			@Override
			public void onClick(ClickEvent event) {
				hideDivBloqueio();
			}
		});
	}

	private void carregaFormShareFB(String perguntaComparacao) {
		root.clear();

		VerticalPanel vertP = new VerticalPanel();
		root.add(vertP);
		vertP.setStylePrimaryName("divCemPorCento");
		//vertP.setBorderWidth(1);		

		HorizontalPanel horPLb = new HorizontalPanel();
		vertP.add(horPLb);
		horPLb.setWidth("94%");

		Label lb = new Label(constants.postar_no_facebook() + ": ");
		horPLb.add(lb);
		lb.setStylePrimaryName("fontTexto1");
		lb.addStyleName("break-word");

		Label lbPerg = new Label(perguntaComparacao);
		horPLb.add(lbPerg);
		lbPerg.setStylePrimaryName("fontTexto5");
		lbPerg.addStyleName("break-word");

		//lb.getElement().getStyle().setBorderStyle(BorderStyle.SOLID);
		//lb.getElement().getStyle().setBorderWidth(1, Unit.PX);
		vertP.setCellVerticalAlignment(horPLb, HasVerticalAlignment.ALIGN_MIDDLE);
		vertP.setCellHorizontalAlignment(horPLb, HasHorizontalAlignment.ALIGN_CENTER);

		Label lb2 = new Label(constants.seu_comentario());
		vertP.add(lb2);
		lb2.setStylePrimaryName("fontPadrao");

		final TextArea txtComent = new TextArea();
		vertP.add(txtComent);
		txtComent.setStylePrimaryName("boxRounded2");
		txtComent.addStyleName("divCemPorCento");
		txtComent.addStyleName("boxShadow");
		txtComent.addStyleName("textAreaNoResize");
		txtComent.setSize("94%", "100px");

		HorizontalPanel horP3 = new HorizontalPanel();
		vertP.add(horP3);
		horP3.setStylePrimaryName("divCenter");
		vertP.setCellHorizontalAlignment(horP3, HasHorizontalAlignment.ALIGN_CENTER);

		Button btnGravaPostFB = new Button("OK");
		horP3.add(btnGravaPostFB);
		btnGravaPostFB.setStylePrimaryName("btnComandoPadrao");
		btnGravaPostFB.addClickHandler(new ClickHandler() {
			@Override
			public void onClick(ClickEvent event) {
				//Window.alert("coment post fb = " + txtComent.getText());
				carregaFormAguarde(constants.postando_comparacao());
				postarFB(txtComent.getText());
			}
		});

		Button btnCancel = new Button(constants.cancel());
		horP3.add(btnCancel);
		btnCancel.setStylePrimaryName("btnComandoPadrao");
		btnCancel.addClickHandler(new ClickHandler() {
			@Override
			public void onClick(ClickEvent event) {
				hideDivBloqueio();
			}
		});
	}

	private void carregaFormShareTwitter(String perguntaComparacao) {
		Window.alert("Form share twitter..");
		root.clear();

		VerticalPanel vertP = new VerticalPanel();
		root.add(vertP);
		vertP.setStylePrimaryName("divCemPorCento");
		//vertP.setBorderWidth(1);		

		HorizontalPanel horPLb = new HorizontalPanel();
		vertP.add(horPLb);
		horPLb.setWidth("94%");

		Label lb = new Label(constants.postar_no_facebook() + ": ");
		horPLb.add(lb);
		lb.setStylePrimaryName("fontTexto1");
		lb.addStyleName("break-word");

		Label lbPerg = new Label(perguntaComparacao);
		horPLb.add(lbPerg);
		lbPerg.setStylePrimaryName("fontTexto5");
		lbPerg.addStyleName("break-word");

		//lb.getElement().getStyle().setBorderStyle(BorderStyle.SOLID);
		//lb.getElement().getStyle().setBorderWidth(1, Unit.PX);
		vertP.setCellVerticalAlignment(horPLb, HasVerticalAlignment.ALIGN_MIDDLE);
		vertP.setCellHorizontalAlignment(horPLb, HasHorizontalAlignment.ALIGN_CENTER);

		Label lb2 = new Label(constants.seu_comentario());
		vertP.add(lb2);
		lb2.setStylePrimaryName("fontPadrao");

		final TextArea txtComent = new TextArea();
		vertP.add(txtComent);
		txtComent.setStylePrimaryName("boxRounded2");
		txtComent.addStyleName("divCemPorCento");
		txtComent.addStyleName("boxShadow");
		txtComent.addStyleName("textAreaNoResize");
		txtComent.setSize("94%", "100px");

		HorizontalPanel horP3 = new HorizontalPanel();
		vertP.add(horP3);
		horP3.setStylePrimaryName("divCenter");
		vertP.setCellHorizontalAlignment(horP3, HasHorizontalAlignment.ALIGN_CENTER);

		Button btnGravaPostFB = new Button("OK");
		horP3.add(btnGravaPostFB);
		btnGravaPostFB.setStylePrimaryName("btnComandoPadrao");
		btnGravaPostFB.addClickHandler(new ClickHandler() {
			@Override
			public void onClick(ClickEvent event) {
				Window.alert("vai postar o tweet..");
				Window.alert("coment = " + txtComent.getText());
				postarTweet(txtComent.getText());
			}
		});

		Button btnCancel = new Button(constants.cancel());
		horP3.add(btnCancel);
		btnCancel.setStylePrimaryName("btnComandoPadrao");
		btnCancel.addClickHandler(new ClickHandler() {
			@Override
			public void onClick(ClickEvent event) {
				hideDivBloqueio();
			}
		});
	}

	private void carregaFormShareBlog(final String site, final String link, final Long compNum, final String perguntaComparacao, Long idComparacao, final Long idUsuario, boolean userAnonimo, boolean permitirLink, String nomeBlog, String linkBlog) {

		final long idComp = Long.parseLong(String.valueOf(idComparacao));

		//Window.alert("carregando form share blog: " + perguntaComparacao + ", icomp: " + idComparacao + ", idUsuario: " + idUsuario + ", permitirLink: " + permitirLink);
		root.clear();

		root.setSize("600px", "540px");
		root.getElement().getStyle().setMarginTop(-270, Unit.PX);

		VerticalPanel vertP = new VerticalPanel();
		root.add(vertP);
		vertP.setStylePrimaryName("divCemPorCento");
		//vertP.setBorderWidth(1);		

		HorizontalPanel horPLb = new HorizontalPanel();
		vertP.add(horPLb);
		horPLb.setWidth("94%");

		Label lb = new Label(constants.postar_no_blog() + ": ");
		horPLb.add(lb);
		lb.setStylePrimaryName("fontTexto1");
		lb.addStyleName("break-word");

		Label lbPerg = new Label(perguntaComparacao);
		horPLb.add(lbPerg);
		lbPerg.setStylePrimaryName("fontTexto5");
		lbPerg.addStyleName("break-word");

		//lb.getElement().getStyle().setBorderStyle(BorderStyle.SOLID);
		//lb.getElement().getStyle().setBorderWidth(1, Unit.PX);
		vertP.setCellVerticalAlignment(horPLb, HasVerticalAlignment.ALIGN_MIDDLE);
		vertP.setCellHorizontalAlignment(horPLb, HasHorizontalAlignment.ALIGN_CENTER);

		//Window.alert("labels ok");
		//Label lb2 = new Label("Seu comentário:");
		//vertP.add(lb2);
		//lb2.setStylePrimaryName("fontPadrao");
		//vertP.add(new HTMLPanel("<br>"));

		final TextArea txtComent = new TextArea();
		txtComent.setReadOnly(true);

		HorizontalPanel horPOpcoes = new HorizontalPanel();
		vertP.add(horPOpcoes);

		final HorizontalPanel horPHTMLPreview = new HorizontalPanel();
		vertP.add(horPHTMLPreview);
		vertP.setCellHorizontalAlignment(horPHTMLPreview, HasHorizontalAlignment.ALIGN_CENTER);
		horPHTMLPreview.setStylePrimaryName("divCenter");

		//Window.alert("horpanels ok");

		final Button btnBigPost = new Button(constants.big_post());
		final Button btnMini = new Button(constants.medio_post());
		final Button btnMicro = new Button(constants.mini_post());
		final Button btnNoAvatar = new Button(constants.noAvatar_post());

		horPOpcoes.add(btnBigPost);
		btnBigPost.setStylePrimaryName("btnLink");
		btnBigPost.addClickHandler(new ClickHandler() {
			@Override
			public void onClick(ClickEvent event) {
				btnBigPost.addStyleName("btnLinkSelecionado");
				btnBigPost.addStyleName("boxShadow");
				btnMini.removeStyleName("btnLinkSelecionado");
				btnMini.removeStyleName("boxShadow");
				btnMicro.removeStyleName("btnLinkSelecionado");
				btnMicro.removeStyleName("boxShadow");
				btnNoAvatar.removeStyleName("btnLinkSelecionado");
				btnNoAvatar.removeStyleName("boxShadow");

				txtComent.setText("<div style=\"position: relative; width: 600px; background-color: #4682B4; border-top-left-radius: 5px; border-top-right-radius: 5px; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px; margin: 0px auto;\"><div style=\"margin-top: 2px; margin-bottom: 2px; margin-left: 5px;\"><a style=\"text-decoration: none;\" href=\"http://" + site + "/" + link + "\"><span style=\"font-family: verdana, tahoma, 'Aclonica', serif; line-height: 22px; font-size: " + (perguntaComparacao.length() > 65?14:(perguntaComparacao.length() > 55?16: 22)) + "px; color: white; text-shadow: 0px 0px 2px white, 0px 0px 3px yellow, 0px 0px 4px #ff8000, 0px 0px 6px red;\">" + perguntaComparacao + "</span></a></div><iframe width=\"600\" height=\"218\" src=\"http://" + site + "/biglink/" + String.valueOf(compNum) + "\" frameborder=\"0\"></iframe></div>");
				HTMLPanel htmlPreview = new HTMLPanel(txtComent.getText());
				horPHTMLPreview.clear();
				horPHTMLPreview.add(htmlPreview);
				txtComent.selectAll();
			}
		});

		horPOpcoes.add(btnMini);
		btnMini.setStylePrimaryName("btnLink");
		btnMini.addClickHandler(new ClickHandler() {
			@Override
			public void onClick(ClickEvent event) {
				btnMini.addStyleName("btnLinkSelecionado");
				btnMini.addStyleName("boxShadow");
				btnBigPost.removeStyleName("btnLinkSelecionado");
				btnBigPost.removeStyleName("boxShadow");
				btnMicro.removeStyleName("btnLinkSelecionado");
				btnMicro.removeStyleName("boxShadow");
				btnNoAvatar.removeStyleName("btnLinkSelecionado");
				btnNoAvatar.removeStyleName("boxShadow");

				txtComent.setText("<div style=\"position: relative; width: 500px; background-color: #4682B4; border-top-left-radius: 5px; border-top-right-radius: 5px; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px; margin: 0px auto;\"><div style=\"margin-top: 2px; margin-bottom: 2px; margin-left: 5px;\"><a style=\"text-decoration: none;\" href=\"http://" + site + "/" + link + "\"><span style=\"font-family: verdana, tahoma, 'Aclonica', serif; font-size: " + (perguntaComparacao.length() > 70?11:(perguntaComparacao.length() > 65?12:(perguntaComparacao.length() > 55?14: 22))) + "px; color: white; text-shadow: 0px 0px 2px white, 0px 0px 3px yellow, 0px 0px 4px #ff8000, 0px 0px 6px red;\">" + perguntaComparacao + "</span></a></div><iframe width=\"500\" height=\"154\" src=\"http://" + site + "/minilink/" + String.valueOf(compNum) + "\" frameborder=\"0\"></iframe></div>");
				HTMLPanel htmlPreview = new HTMLPanel(txtComent.getText());
				horPHTMLPreview.clear();
				horPHTMLPreview.add(htmlPreview);
				txtComent.selectAll();
			}
		});

		//Window.alert("btn ok");

		horPOpcoes.add(btnMicro);
		btnMicro.setStylePrimaryName("btnLink");
		btnMicro.addClickHandler(new ClickHandler() {
			@Override
			public void onClick(ClickEvent event) {
				btnMicro.addStyleName("btnLinkSelecionado");
				btnMicro.addStyleName("boxShadow");
				btnBigPost.removeStyleName("btnLinkSelecionado");
				btnBigPost.removeStyleName("boxShadow");
				btnMini.removeStyleName("btnLinkSelecionado");
				btnMini.removeStyleName("boxShadow");
				btnNoAvatar.removeStyleName("btnLinkSelecionado");
				btnNoAvatar.removeStyleName("boxShadow");

				txtComent.setText("<div style=\"position: relative; width: 500px; background-color: #4682B4; border-top-left-radius: 5px; border-top-right-radius: 5px; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px; margin: 0px auto;\"><div style=\"margin-top: 2px; margin-bottom: 2px; margin-left: 5px;\"><a style=\"text-decoration: none;\" href=\"http://" + site + "/" + link + "\"><span style=\"font-family: verdana, tahoma, 'Aclonica', serif; font-size: " + (perguntaComparacao.length() > 70?11:(perguntaComparacao.length() > 65?12:(perguntaComparacao.length() > 55?14: 22))) + "px; color: white; text-shadow: 0px 0px 2px white, 0px 0px 3px yellow, 0px 0px 4px #ff8000, 0px 0px 6px red;\">" + perguntaComparacao + "</span></a></div><iframe width=\"500\" height=\"124\" src=\"http://" + site + "/microlink/" + String.valueOf(compNum) + "\" frameborder=\"0\"></iframe></div>");
				HTMLPanel htmlPreview = new HTMLPanel(txtComent.getText());
				horPHTMLPreview.clear();
				horPHTMLPreview.add(htmlPreview);
				txtComent.selectAll();
			}
		});

		horPOpcoes.add(btnNoAvatar);
		btnNoAvatar.setStylePrimaryName("btnLink");
		btnNoAvatar.addClickHandler(new ClickHandler() {
			@Override
			public void onClick(ClickEvent event) {
				btnNoAvatar.addStyleName("btnLinkSelecionado");
				btnNoAvatar.addStyleName("boxShadow");
				btnBigPost.removeStyleName("btnLinkSelecionado");
				btnBigPost.removeStyleName("boxShadow");
				btnMini.removeStyleName("btnLinkSelecionado");
				btnMini.removeStyleName("boxShadow");
				btnMicro.removeStyleName("btnLinkSelecionado");
				btnMicro.removeStyleName("boxShadow");

				txtComent.setText("<div style=\"position: relative; width: 500px; background-color: #4682B4; border-top-left-radius: 5px; border-top-right-radius: 5px; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px; margin: 0px auto;\"><div style=\"margin-top: 2px; margin-bottom: 2px; margin-left: 5px;\"><a style=\"text-decoration: none;\" href=\"http://" + site + "/" + link + "\"><span style=\"font-family: verdana, tahoma, 'Aclonica', serif; font-size: " + (perguntaComparacao.length() > 70?11:(perguntaComparacao.length() > 65?12:(perguntaComparacao.length() > 55?14: 22))) + "px; color: white; text-shadow: 0px 0px 2px white, 0px 0px 3px yellow, 0px 0px 4px #ff8000, 0px 0px 6px red;\">" + perguntaComparacao + "</span></a></div><iframe width=\"500\" height=\"144\" src=\"http://" + site + "/noavatarlink/" + String.valueOf(compNum) + "\" frameborder=\"0\"></iframe></div>");
				HTMLPanel htmlPreview = new HTMLPanel(txtComent.getText());
				horPHTMLPreview.clear();
				horPHTMLPreview.add(htmlPreview);
				txtComent.selectAll();
			}
		});

		HorizontalPanel horPCopy = new HorizontalPanel();
		vertP.add(horPCopy);

		final Label lbInstr = new Label(constants.copie_e_cole_o_codigo_abaixo_no_seu_site_blog());
		lbInstr.setStylePrimaryName("fontPadrao");
		horPCopy.add(lbInstr);

		Button btnCopy = new Button(constants.clique_para_copiar());
		//horPCopy.add(btnCopy);
		//btnCopy.setStylePrimaryName("btnMoreResults");
		btnCopy.addClickHandler(new ClickHandler() {
			@Override
			public void onClick(ClickEvent event) {
				startCopyEvent(txtComent.getText());
			}
		});


		btnMini.addStyleName("btnLinkSelecionado");
		btnMini.addStyleName("boxShadow");
		btnBigPost.removeStyleName("btnLinkSelecionado");
		btnBigPost.removeStyleName("boxShadow");
		btnMicro.removeStyleName("btnLinkSelecionado");
		btnMicro.removeStyleName("boxShadow");
		btnNoAvatar.removeStyleName("btnLinkSelecionado");
		btnNoAvatar.removeStyleName("boxShadow");

		txtComent.setText("<div style=\"position: relative; width: 500px; background-color: #4682B4; border-top-left-radius: 5px; border-top-right-radius: 5px; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px; margin: 0px auto;\"><div style=\"margin-top: 2px; margin-bottom: 2px; margin-left: 5px;\"><a style=\"text-decoration: none;\" href=\"http://" + site + "/" + link + "\"><span style=\"font-family: verdana, tahoma, 'Aclonica', serif; font-size: " + (perguntaComparacao.length() > 70?11:(perguntaComparacao.length() > 65?12:(perguntaComparacao.length() > 55?14: 22))) + "px; color: white; text-shadow: 0px 0px 2px white, 0px 0px 3px yellow, 0px 0px 4px #ff8000, 0px 0px 6px red;\">" + perguntaComparacao + "</span></a></div><iframe width=\"500\" height=\"154\" src=\"http://" + site + "/minilink/" + String.valueOf(compNum) + "\" frameborder=\"0\"></iframe></div>");
		HTMLPanel htmlPreview = new HTMLPanel(txtComent.getText());
		horPHTMLPreview.clear();
		horPHTMLPreview.add(htmlPreview);
		txtComent.selectAll();

		vertP.add(txtComent);
		//txtComent.setStylePrimaryName("boxRounded2");
		//txtComent.addStyleName("divCemPorCento");
		//txtComent.addStyleName("boxShadow");
		vertP.setCellHorizontalAlignment(txtComent, HasHorizontalAlignment.ALIGN_CENTER);
		txtComent.setSize("94%", "100px");
		txtComent.setStylePrimaryName("divCenter");
		txtComent.addStyleName("textAreaNoResize");

		txtComent.addClickHandler(new ClickHandler() {
			@Override
			public void onClick(ClickEvent event) {
				txtComent.setTitle(constants.prescione_control_c_para_copiar());
				lbInstr.setText(constants.prescione_control_c_para_copiar());
				txtComent.selectAll();
			}
		});

		txtComent.addBlurHandler(new BlurHandler() {
			@Override
			public void onBlur(BlurEvent event) {
				lbInstr.setText(constants.copie_e_cole_o_codigo_abaixo_no_seu_site_blog());
			}
		});

		//Window.alert("textarea ok");

		final TextBox txtNomeBlog = new TextBox();
		final TextBox txtLink = new TextBox();

		//Window.alert("criou o texbox ok");

		if (permitirLink) { // somente se o usuario que criou a comparacao vai compartilhar

			txtComent.setHeight("60px");

			if (nomeBlog == null) {
				nomeBlog = "";
			}
			if (linkBlog == null) {
				linkBlog = "";
			}
			txtNomeBlog.setText(String.valueOf(nomeBlog));
			txtLink.setText(String.valueOf(linkBlog));

			Label lb2 = new Label(constants.deseja_ter_um_link_para_seu_site_blog() + " " + constants.informe_os_dados_abaixo());
			vertP.add(lb2);
			lb2.setStylePrimaryName("fontPadrao4");

			//Window.alert("label 2 e 3 ok");

			FlexTable tbBlog = new FlexTable();
			vertP.add(tbBlog);
			Label lb4 = new Label(constants.nome_do_seu_blog_site());
			lb4.setStylePrimaryName("fontPadrao4");
			tbBlog.setWidget(0, 0, lb4);
			tbBlog.setWidget(0, 1, txtNomeBlog);

			Label lb5 = new Label(constants.endereco_do_seu_blog_site());
			lb5.setStylePrimaryName("fontPadrao4");
			tbBlog.setWidget(1, 0, lb5);
			tbBlog.setWidget(1, 1, txtLink);

			//Window.alert("labels 4 e 5 ok");

			Label lb6 = new Label("* " + constants.mantenha_nosso_codigo_na_pagina_indicada_para_que_o_link_se_mantenha_valido());
			lb6.getElement().getStyle().setFontWeight(FontWeight.BOLD);
			tbBlog.setWidget(2, 0, lb6);
			tbBlog.getFlexCellFormatter().setColSpan(2, 0, 2);
		} else {
			if (userAnonimo) {
				Label lbFacaLogin = new Label(constants.faca_o_login_e_ganhe_um_link_direto_para_seu_site_blog());
				lbFacaLogin.setStylePrimaryName("fontPadrao4");
				vertP.add(lbFacaLogin);
			}
		}

		//Window.alert("flextable ok");

		HorizontalPanel horP3 = new HorizontalPanel();
		vertP.add(horP3);
		horP3.setStylePrimaryName("divCenter");
		vertP.setCellHorizontalAlignment(horP3, HasHorizontalAlignment.ALIGN_CENTER);

		Button btnOK = new Button(constants.salvar());
		if (permitirLink) {
			btnOK.setStylePrimaryName("btnComandoPadrao");
			horP3.add(btnOK);
			btnOK.addClickHandler(new ClickHandler() {
				@Override
				public void onClick(ClickEvent event) {
					salvaLinkBlogComparacao(idComp, Long.parseLong(String.valueOf(idUsuario)), txtNomeBlog.getText().trim(), txtLink.getText().trim());
				}
			});
		}

		Button btnCancel = new Button(permitirLink?constants.cancel():constants.finalizado());
		horP3.add(btnCancel);
		btnCancel.setStylePrimaryName("btnComandoPadrao");
		btnCancel.addClickHandler(new ClickHandler() {
			@Override
			public void onClick(ClickEvent event) {
				hideDivBloqueio();
			}
		});

		//Window.alert("rotina ok");
	}

	private void carregaFormErroFB(String msgErro) {
		root.clear();

		VerticalPanel vertP = new VerticalPanel();
		root.add(vertP);
		vertP.setStylePrimaryName("divCemPorCento");
		//vertP.setBorderWidth(1);

		Label lb = new Label(msgErro);
		vertP.add(lb);
		lb.setStylePrimaryName("fontTexto1");
		lb.addStyleName("break-word");
		lb.addStyleName("fontTextAlignCenter");
		lb.setWidth("94%");

		vertP.setCellVerticalAlignment(lb, HasVerticalAlignment.ALIGN_MIDDLE);
		vertP.setCellHorizontalAlignment(lb, HasHorizontalAlignment.ALIGN_CENTER);

		HorizontalPanel horP3 = new HorizontalPanel();
		vertP.add(horP3);
		horP3.setStylePrimaryName("divCenter");
		vertP.setCellHorizontalAlignment(horP3, HasHorizontalAlignment.ALIGN_CENTER);

		Button btnCancel = new Button(constants.finalizado());
		horP3.add(btnCancel);
		btnCancel.setStylePrimaryName("btnComandoPadrao");
		btnCancel.addClickHandler(new ClickHandler() {
			@Override
			public void onClick(ClickEvent event) {
				hideDivBloqueio();
			}
		});
	}

	private void carregaFormAguarde(String msg) {
		root.clear();

		VerticalPanel vertP = new VerticalPanel();
		root.add(vertP);
		vertP.setStylePrimaryName("divCemPorCento");
		//vertP.setBorderWidth(1);

		Label lbAguarde = new Label(constants.aguarde());
		vertP.add(lbAguarde);
		lbAguarde.setStylePrimaryName("fontTexto1");
		lbAguarde.addStyleName("break-word");
		lbAguarde.addStyleName("fontTextAlignCenter");
		lbAguarde.setWidth("94%");


		Label lb = new Label(msg);
		vertP.add(lb);
		lb.setStylePrimaryName("fontTexto1");
		lb.addStyleName("break-word");
		lb.addStyleName("fontTextAlignCenter");
		lb.setWidth("94%");

		vertP.setCellVerticalAlignment(lb, HasVerticalAlignment.ALIGN_MIDDLE);
		vertP.setCellHorizontalAlignment(lb, HasHorizontalAlignment.ALIGN_CENTER);

		HorizontalPanel horP3 = new HorizontalPanel();
		vertP.add(horP3);
		horP3.setStylePrimaryName("divCenter");
		vertP.setCellHorizontalAlignment(horP3, HasHorizontalAlignment.ALIGN_CENTER);

		Button btnCancel = new Button(constants.finalizado());
		horP3.add(btnCancel);
		btnCancel.setStylePrimaryName("btnComandoPadrao");
		btnCancel.addClickHandler(new ClickHandler() {
			@Override
			public void onClick(ClickEvent event) {
				hideDivBloqueio();
			}
		});
	}

	private void gravaVoto(final Long idComparacao, final Long idUsuario, final String nomeUsuario, final String strIconeUsuario, final Long idProduto, final String coment) {
		if (serviceSupportSvc == null) {
			serviceSupportSvc = GWT.create(ISessionSuportService.class);
		}

		GWT.setUncaughtExceptionHandler(new GWT.UncaughtExceptionHandler() {
			@Override
			public void onUncaughtException(Throwable e) {
				e.printStackTrace();
				System.out.println("Excecao nao tratada em Horario Carrega Sessao !!!!!!!!!!");
			}
		});

		AsyncCallback<Integer> callback = new AsyncCallback<Integer>() {
			@Override
			public void onFailure(Throwable caught) {
				//Window.alert("Erro ao tentar gravar! Por favor, aperte a tecla F5 do seu teclado para atualizar! - Failure");
				carregaFormErroFB(constants.opss_nao_foi_possivel_gravar_o_voto_neste_momento_lamentamos_o_inconveniente());
			}

			@Override
			public void onSuccess(Integer i) {
				if (i != null && i >= 0) {
					// Redireciona para a pagina da comparacao..
					// Verifica se o usuario esta conectado e sugere um metodo de compartilhamento
					//Window.alert("Comparacao gravada. redirecionando...");
					//hideDivBloqueio();
					addVoto(idComparacao, i, idProduto, idUsuario, nomeUsuario, strIconeUsuario, coment);
					//Window.Location.replace("/comparacao/" + comp.getPath(ParametrosSistema.SiteHost.SITE_QUAL_O_MELHOR));
	
				} else {
					//Window.alert("Erro ao tentar gravar! Por favor, aperte a tecla F5 do seu teclado para atualizar. B - False!");
					carregaFormErroFB(constants.opss_nao_foi_possivel_gravar_o_voto_neste_momento_lamentamos_o_inconveniente());
				}
			}
		};
		//Window.alert("gravando voto: idComparacao = " + idComparacao);
		//Window.alert("voto comentario = " + coment);
		//serviceSupportSvc.teste(true, callback);
		serviceSupportSvc.gravaVoto(idComparacao, idUsuario, idProduto, coment, callback);
		//serviceSupportSvc.gravaVotoComparacao(idComparacao, callback);
	}

	private void alteraVoto(final int idVoto, final Long idComparacao, final Long idUsuario, final String nomeUsuario, final String strIconeUsuario, final Long idProduto, final String coment) {
		if (serviceSupportSvc == null) {
			serviceSupportSvc = GWT.create(ISessionSuportService.class);
		}

		GWT.setUncaughtExceptionHandler(new GWT.UncaughtExceptionHandler() {
			@Override
			public void onUncaughtException(Throwable e) {
				e.printStackTrace();
				System.out.println("Excecao nao tratada em Horario Carrega Sessao !!!!!!!!!!");
			}
		});

		AsyncCallback<Integer> callback = new AsyncCallback<Integer>() {
			@Override
			public void onFailure(Throwable caught) {
				Window.alert("Erro ao tentar gravar! Por favor, aperte a tecla F5 do seu teclado para atualizar! - Failure");
			}

			@Override
			public void onSuccess(Integer i) {
				if (i != null && i >= 0) {
					// Redireciona para a pagina da comparacao..
					// Verifica se o usuario esta conectado e sugere um metodo de compartilhamento
					//Window.alert("Comparacao gravada. redirecionando...");
					hideDivBloqueio();
					alteraVoto(idComparacao, i, idProduto, idUsuario, nomeUsuario, strIconeUsuario, coment);
					//Window.Location.replace("/comparacao/" + comp.getPath(ParametrosSistema.SiteHost.SITE_QUAL_O_MELHOR));
	
				} else {
					Window.alert("Erro ao tentar gravar! Por favor, aperte a tecla F5 do seu teclado para atualizar. B - False!");
				}
			}
		};
		serviceSupportSvc.alteraVoto(idVoto, idComparacao, idUsuario, coment, callback);
	}

	private void deletaVoto(final int idVoto, final Long idComparacao, final Long idUsuario, final Long idProduto) {
		if (serviceSupportSvc == null) {
			serviceSupportSvc = GWT.create(ISessionSuportService.class);
		}

		GWT.setUncaughtExceptionHandler(new GWT.UncaughtExceptionHandler() {
			@Override
			public void onUncaughtException(Throwable e) {
				e.printStackTrace();
				System.out.println("Excecao nao tratada em Horario Carrega Sessao !!!!!!!!!!");
			}
		});

		AsyncCallback<Boolean> callback = new AsyncCallback<Boolean>() {
			@Override
			public void onFailure(Throwable caught) {
				Window.alert("Erro ao tentar gravar! Por favor, aperte a tecla F5 do seu teclado para atualizar! - Failure");
			}

			@Override
			public void onSuccess(Boolean b) {
				if (b) {
					// Redireciona para a pagina da comparacao..
					// Verifica se o usuario esta conectado e sugere um metodo de compartilhamento
					//Window.alert("Comparacao gravada. redirecionando...");
					hideDivBloqueio();
					deletaVoto(idVoto, idProduto);
					//Window.alert("Voto deletado com sucesso");
					//addVoto(idComparacao, i, idProduto, idUsuario, nomeUsuario, strIconeUsuario, coment);
					//Window.Location.replace("/comparacao/" + comp.getPath(ParametrosSistema.SiteHost.SITE_QUAL_O_MELHOR));
	
				} else {
					Window.alert("Erro ao tentar gravar! Por favor, aperte a tecla F5 do seu teclado para atualizar. B - False!");
				}
			}
		};
		serviceSupportSvc.deletaVoto(idVoto, idComparacao, idUsuario, callback);
	}

	private void gravaRespostaComentario(final Long idComparacao, final Long idUsuario, final String nomeUsuario, final String strIconeUsuario, final String pathId, final int idVoto, final Long idProd, final String coment, final int margin, final String divIdDest) {
		if (serviceSupportSvc == null) {
			serviceSupportSvc = GWT.create(ISessionSuportService.class);
		}

		GWT.setUncaughtExceptionHandler(new GWT.UncaughtExceptionHandler() {
			@Override
			public void onUncaughtException(Throwable e) {
				e.printStackTrace();
				System.out.println("Excecao nao tratada em Horario Carrega Sessao !!!!!!!!!!");
			}
		});

		AsyncCallback<Integer> callback = new AsyncCallback<Integer>() {
			@Override
			public void onFailure(Throwable caught) {
				Window.alert("Erro ao tentar gravar! Por favor, aperte a tecla F5 do seu teclado para atualizar! - Failure");
			}

			@Override
			public void onSuccess(Integer i) {
				if (i != null && i >= 0) {
					// Redireciona para a pagina da comparacao..
					// Verifica se o usuario esta conectado e sugere um metodo de compartilhamento
					//Window.alert("Comparacao gravada. redirecionando...");
					hideDivBloqueio();
					String newPathId = (pathId.trim().equals("")?String.valueOf(i):(pathId + "-" + i));
					addResposta(idComparacao, idVoto, newPathId, idProd, idUsuario, nomeUsuario, strIconeUsuario, coment, margin + 20, divIdDest, i);
					//Window.Location.replace("/comparacao/" + comp.getPath(ParametrosSistema.SiteHost.SITE_QUAL_O_MELHOR));
	
				} else {
					Window.alert("Erro ao tentar gravar! Por favor, aperte a tecla F5 do seu teclado para atualizar. B - False!");
				}
			}
		};
		//Window.alert("gravando voto: idComparacao = " + idComparacao);

		//Window.alert("path id = " + pathId);
		//Window.alert("idVoto = " + idVoto);
		//Window.alert("comentario = " + coment);
		//serviceSupportSvc.teste(true, callback);

		serviceSupportSvc.gravaRespostaComentario(idComparacao, idVoto, pathId, idUsuario, coment, callback);
		//serviceSupportSvc.gravaVotoComparacao(idComparacao, callback);
	}

	private void salvaLinkBlogComparacao(final Long idComparacao, Long idUsuarioLink, final String nomeBlog, final String link) {
		if (serviceSupportSvc == null) {
			serviceSupportSvc = GWT.create(ISessionSuportService.class);
		}

		GWT.setUncaughtExceptionHandler(new GWT.UncaughtExceptionHandler() {
			@Override
			public void onUncaughtException(Throwable e) {
				e.printStackTrace();
				System.out.println("Excecao nao tratada em Horario Carrega Sessao !!!!!!!!!!");
			}
		});

		AsyncCallback<Boolean> callback = new AsyncCallback<Boolean>() {
			@Override
			public void onFailure(Throwable caught) {
				Window.alert("Erro ao tentar gravar! Por favor, aperte a tecla F5 do seu teclado para atualizar! - Failure");
			}

			@Override
			public void onSuccess(Boolean b) {
				if (b) {
					hideDivBloqueio();
					// mandar alguma mensagem aqui
					setMsgTextGWT(constants.mantenha_o_codigo_na_sua_pagina_para_deixar_o_link_para_seu_site_ativo(), false);
					alteraLinkBlog(nomeBlog, link);
				} else {
					Window.alert("Erro ao tentar gravar! Por favor, aperte a tecla F5 do seu teclado para atualizar. B - False!");
				}
			}
		};

		serviceSupportSvc.salvaLinkBlogComparacao(idComparacao, idUsuarioLink, nomeBlog, link, callback);
	}

	/*
	private void carregaSessaoAtual() {
		if (serviceSupportSvc == null) {
			serviceSupportSvc = GWT.create(ISessionSuportService.class);
		}

		GWT.setUncaughtExceptionHandler(new GWT.UncaughtExceptionHandler() {
			@Override
			public void onUncaughtException(Throwable e) {
				e.printStackTrace();
				System.out.println("Excecao nao tratada em Horario Carrega Sessao !!!!!!!!!!");
			}
		});

		AsyncCallback<HashMap<String, Object>> callback = new AsyncCallback<HashMap<String, Object>>() {
			@Override
			public void onFailure(Throwable caught) {
				Window.alert("Erro ao tentar gravar! Por favor, aperte a tecla F5 do seu teclado para atualizar!");
			}

			@Override
			public void onSuccess(HashMap<String, Object> mapSession) {
				if (mapSession != null) {
					u = (Usuario)mapSession.get("USUARIOATUAL");
					locale = (String)mapSession.get("LOCALE");
				} else {
					u = null;
					locale = LocaleInfo.getCurrentLocale().getLocaleName();
				}

				System.out.println("locale = " + locale);
				//carregaFormComparacao2Coisas();
			}
		};
		System.out.println("carregando sessao...");
		serviceSupportSvc.carregaSessaoAtual(callback);
	}
	*/

	private void salvaShareFBID(final Long idComparacao, final String idShare) {
		if (serviceSupportSvc == null) {
			serviceSupportSvc = GWT.create(ISessionSuportService.class);
		}

		GWT.setUncaughtExceptionHandler(new GWT.UncaughtExceptionHandler() {
			@Override
			public void onUncaughtException(Throwable e) {
				e.printStackTrace();
				System.out.println("Excecao nao tratada em Horario Carrega Sessao !!!!!!!!!!");
			}
		});

		AsyncCallback<Boolean> callback = new AsyncCallback<Boolean>() {
			@Override
			public void onFailure(Throwable caught) {
				Window.alert("Erro ao tentar gravar! Por favor, aperte a tecla F5 do seu teclado para atualizar! - Failure");
			}

			@Override
			public void onSuccess(Boolean b) {
				if (b) {
					//Window.alert("shareId salvo com sucesso!");
					// mandar alguma mensagem aqui
				} else {
					//Window.alert("Erro ao tentar gravar! Por favor, aperte a tecla F5 do seu teclado para atualizar. B - False!");
				}
			}
		};

		Long idComp = Long.parseLong(String.valueOf(idComparacao));
		String shareId = String.valueOf(idShare);
		
		//Window.alert("Vai tentar salvar o sharefb:" + idComparacao + ", shareid:" + shareId);		
		serviceSupportSvc.salvaShareFBID(idComp, shareId, callback);
	}
}